package org.starti.metadata;

import java.lang.reflect.Method;


/**
 * Abstract interface for all Metadata implementations.
 *
 * @author <a href="mailto:claudiu.dumitrescu@gmail.com">Claudiu Dumitrescu</a>
 */
public interface MetadataProvider {

    Object getClassMetadata(Class clazz);

    /**
     * Obtain metadata informations for specified property.
     *
     * @param element Accessor method for a property.
     * @return Metadata object.
     */
    Object getPropertyMetadata(Method element);

    Object getMethodMetadata(Method element);

    Class getClassClass();

    Class getPropertyClass();

    Class getMethodClass();


    boolean supports(Class clazz);
}
